<?php

class Solicitud extends CI_Controller {

    // Opciones para mostrar el mensaje
    const INT_OPC_REGISTRAR = 1;
    const INT_OPC_ACTUALIZAR = 2;
    const INT_OPC_ANULAR = 3;

    // Directorio
    const STR_DIRECTORIO_IMAGENES = './';

    // Indicadores de acuerdo a la opcion seleccionada
    const STR_IND_SUSPENDIDA = 'S';
    const STR_IND_ANULADA = 'A';
    const STR_IND_ENVIADA = 'E';

    // Mensaje de exito
    const STR_MENSAJE_OK = 'ok';

    /**
     * Constructor
     * @author Fernando Esteban Valerio
     */
    function __construct() {
        parent::__construct();
        $this->load->model('solicitud_model', '', true);
        $this->load->model('moneda_model', '', true);
        $this->load->model('marca_model', '', true);
        $this->load->model('modelo_model', '', true);
        $this->load->model('tipo_carroceria_model', '', true);
        $this->load->model('repuesto_model', '', true);
        $this->load->model('repuesto_x_solicitud_model', '', true);
        $this->load->model('repuesto_x_cotizacion_model', '', true);
        $this->load->model('taller_model', '', true);
        $this->load->model('responsable_model', '', true);
        $this->load->model('proveedor_model', '', true);
        $this->load->model('cotizacion_model', '', true);
        $this->load->model('persona_model', '', true);
        $this->load->model('persona_natural_model', '', true);
        $this->load->model('persona_juridica_model', '', true);
        $this->load->model('usuario_model', '', true);
        $this->load->model('ubigeo_model', '', true);
        $this->load->model('orden_compra_model', '', true);
        $this->load->helper('util');
    }

    /**
     * Metodo principal de la bandeja de solicitudes.
     * @author Fernando Esteban Valerio
     * @param int $resultado Opción para mostrar mensaje
     */
    public function index($resultado=0) {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != "") {
            $tipoUsuario = $sessionData['tipo_usuario'];
            $idCliente = 0;
            if ($tipoUsuario == INT_CLIENTE) {
                $idCliente = $sessionData['id'];
            }
            $lstSolicitud = $this->solicitud_model->getListSolicitudBandeja($idCliente);

            $data = array(
                'lstSolicitud' => $lstSolicitud,
                'tamCodigo' => INT_TAM_CODIGO,
                'estadoSuspendida' => INT_ESTADO_SUSPENDIDA,
                'estadoEnviada' => INT_ESTADO_ENVIADA,
                'estadoConRespuesta' => INT_ESTADO_CON_REPUESTA,
                'estadoAnulada' => INT_ESTADO_ANULADA,
                'estadoOGenerada' => INT_SOL_ESTADO_ORDEN_GENERADA
            );
            switch ($resultado) {
                case self::INT_OPC_REGISTRAR:
                    $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                    $data['class'] = 'alert_success';
                    break;

                case self::INT_OPC_ACTUALIZAR:
                    $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                    $data['class'] = 'alert_success';
                    break;

                case self::INT_OPC_ANULAR:
                    $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                    $data['class'] = 'alert_success';
                    break;
            }
            $data['page_title'] = 'Bandeja de Solicitudes';
            $this->load->view('solicitud/solicitud_view', $data);
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /**
     * Metodo para anular una solicitud desde la bandeja de solicitudes.
     * @author Fernando Esteban Valerio
     */
    public function anular() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != "") {
            $idSolicitud = filter_input(INPUT_GET, 'id');
            $data['id_estado'] = INT_ESTADO_ANULADA;
            $data['usuario_modificacion'] = $sessionData['id'];
            $data['fecha_modificacion'] = date('Y-m-d H:i:s');
            $data['id_solicitud'] = $idSolicitud;
            $this->solicitud_model->updateEstado($data);
            $this->index(self::INT_OPC_ANULAR);
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /**
     * Metodo para anular una solicitud desde el formulario de registro.
     * @author Fernando Esteban Valerio
     */
    public function anularSolicitud() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != "") {
            $idSolicitud = filter_input(INPUT_POST, 'idSolicitud');
            $data['id_estado'] = INT_ESTADO_ANULADA;
            $data['usuario_modificacion'] = $sessionData['id'];
            $data['fecha_modificacion'] = date('Y-m-d H:i:s');
            $data['id_solicitud'] = $idSolicitud;
            $this->solicitud_model->updateEstado($data);
            $resultado = 'ok';
            echo $resultado;
        }
    }

    /**
     * Metodo para generar orden de compra.
     * @author Fernando Esteban Valerio
     */
    public function generarOC() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != "") {
            $idSolicitud = 0;
            if ($this->input->get()) {
                $idSolicitud = filter_input(INPUT_GET, 'id');
            }
            if ($this->input->post()) {
                $idSolicitud = filter_input(INPUT_POST, 'id');
            }
            // Obtener datos de la solicitud
            $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
            $dataUsuario['id_usuario'] = $objSolicitud[0]->id_usuario;
            $objUsuario = $this->usuario_model->getUsuario($dataUsuario);
            $objPersona = $this->persona_model->getIdPersona($objUsuario['id_persona']);

            $idUbigeo = $objPersona[0]->id_ubigeo;
            $objUbigeo = $this->ubigeo_model->getInfoUbigeo($idUbigeo);
            $ubicacion = $objUbigeo[0]->nombre_ubigeo;

            $objPersonaNatural = $this->persona_natural_model->getPersonaNatural($objPersona[0]->id_persona);

            $txtDocumento = '';
            if ($objPersonaNatural[0]->id_tipo_documento == INT_DNI) {
                $txtDocumento = STR_DNI;
            } else {
                $txtDocumento = STR_CARNET_EXTRANJERIA;
            }

            $lugarEntrega = '';
            if ($objSolicitud[0]->entrega_taller == 0) {
                $lugarEntrega = $objSolicitud[0]->otro_taller;
            } else {
                $objTaller = $this->taller_model->getTaller($objSolicitud[0]->id_taller);
                $lugarEntrega = $objTaller[0]->valor_2;
            }
            // Obtener los repuestos cotizados
            $lstRepuestosCotizados = $this->solicitud_model->getRepuestoCotXSolicitud($idSolicitud);

            $data['page_title'] = 'Visualizar Orden de Compra';
            $data['objPersonaNatural'] = $objPersonaNatural;
            $data['objPersona'] = $objPersona;
            $data['lstRepuesto'] = $lstRepuestosCotizados;
            $data['txtDocumento'] = $txtDocumento;
            $data['ubicacion'] = $ubicacion;
            $data['lugarEntrega'] = $lugarEntrega;
            $data['idSolicitud'] = $idSolicitud;
            $data['lectura'] = '';
            $data['numPedido'] = '';
            $data['igv'] = $objSolicitud[0]->igv;

            $simboloMoneda = '';
            if ($objSolicitud[0]->id_moneda == INT_SOLES) {
                $simboloMoneda = STR_SIMBOLO_SOLES;
            } else {
                $simboloMoneda = STR_SIMBOLO_DOLARES;
            }
            $data['simboloMoneda'] = $simboloMoneda;
                
            if ($this->input->post()) {
                // Obtener los repuestos por solicitud
                $lstRepuetosSolicitud = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitud);

                // Inicializar la transaccion
                $this->db->trans_begin();

                $lstCotizacionesSel = $this->repuesto_x_cotizacion_model->getCotizacionSeleccionadas($idSolicitud);
                foreach ($lstCotizacionesSel as $objResultado) {
                    // Actualizar estado de las cotizaciones
                    $dataCotizacion['estado'] = INT_COT_ESTADO_ORDEN_GENERADA;
                    $dataCotizacion['usuario_modificacion'] = $sessionData['id'];
                    $dataCotizacion['fecha_modificacion'] = date('Y-m-d H:i:s');
                    $dataCotizacion['id_cotizacion'] = $objResultado->id_cotizacion;
                    $this->cotizacion_model->updateEstado($dataCotizacion);
                }
                $lstCotizacionesNoSel = $this->repuesto_x_cotizacion_model->getCotizacionNoSeleccionadas($idSolicitud);
                foreach ($lstCotizacionesNoSel as $objResultado) {
                    if ($objResultado->total == count($lstRepuetosSolicitud)) {
                        // Actualizar estado de las cotizaciones
                        $dataCotizacion['estado'] = INT_COT_ESTADO_ANULADA;
                        $dataCotizacion['usuario_modificacion'] = $sessionData['id'];
                        $dataCotizacion['fecha_modificacion'] = date('Y-m-d H:i:s');
                        $dataCotizacion['id_cotizacion'] = $objResultado->id_cotizacion;
                        $this->cotizacion_model->updateEstado($dataCotizacion);
                    }
                }
                // Actualizar estado de la solicitud
                $dataSolicitud['id_estado'] = INT_SOL_ESTADO_ORDEN_GENERADA;
                $dataSolicitud['usuario_modificacion'] = $sessionData['id'];
                $dataSolicitud['fecha_modificacion'] = date('Y-m-d H:i:s');
                $dataSolicitud['id_solicitud'] = $idSolicitud;
                $this->solicitud_model->updateEstado($dataSolicitud);

                $total = 0;
                $lstRepuestosCotizados = $this->solicitud_model->getRepuestoCotXSolicitud($idSolicitud);
                foreach ($lstRepuestosCotizados as $objRepuesto) {
                    $total += $objRepuesto->total;
                }
                $dataOC['id_solicitud'] = $idSolicitud;
                $dataOC['id_usuario'] = $objSolicitud[0]->id_usuario;
                $dataOC['usuario_registro'] = $sessionData['id'];
                $dataOC['fecha_registro'] = date('Y-m-d H:i:s');
                if ($objSolicitud[0]->igv == 0) {
                    $dataOC['total_sin_igv'] = ($total - ($total * INT_IGV));
                    $dataOC['igv'] = ($total * INT_IGV);
                    $dataOC['total_con_igv'] = $total;
                } else {
                    $dataOC['total_sin_igv'] = $total;
                    $dataOC['igv'] = 0;
                    $dataOC['total_con_igv'] = $total;
                }
                $this->orden_compra_model->insertCabecera($dataOC);
                $idOC = $this->orden_compra_model->getLastInserted();

                foreach ($lstRepuestosCotizados as $objRepuesto) {
                    $dataDetalle['id_cotizacion'] = $objRepuesto->cotizacion;
                    $dataDetalle['usuario_registro'] = $sessionData['id'];
                    $dataDetalle['fecha_registro'] = date('Y-m-d H:i:s');
                    $dataDetalle['total'] = $objRepuesto->total;
                    $dataDetalle['cantidad'] = $objRepuesto->cantidad;
                    $dataDetalle['id_orden_compra'] = $idOC;
                    $dataDetalle['id_repuesto'] = $objRepuesto->repuesto;
                    $dataDetalle['id_solicitud'] = $idSolicitud;
                    $this->orden_compra_model->insertDetalle($dataDetalle);
                }
                $data['numPedido'] = STR_COD_OC . formatoNumOC($idOC);
                if ($this->db->trans_status() == 0) {
                    $this->db->trans_rollback();
                } else {
                    $this->db->trans_commit();
                }
                $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                $data['class'] = 'alert_success';
                $data['lectura'] = 'disabled="disabled"';

                $lstCotizacionesSel = $this->repuesto_x_cotizacion_model->getCotizacionSeleccionadas($idSolicitud);
                foreach ($lstCotizacionesSel as $idCotizacion) {
                    $objCotizacion = $this->cotizacion_model->getInfoClienteYProveedor($idCotizacion->id_cotizacion);
                    $codigo = formatoNumCaso($objCotizacion[0]->id_cotizacion);                

                    $datosCliente = '';
                    $idPersona = $objCotizacion[0]->id_persona;
                    $tipoCliente = $objCotizacion[0]->id_tipo_cliente;
                    if ($tipoCliente == INT_CLIENTE_INDIVIDUAL) {
                        $objPersona = $this->persona_natural_model->getPersonaNatural($idPersona);
                        $datosCliente = trim($objPersona[0]->nombres . ' ' . $objPersona[0]->apellidos);
                    }
                    if ($tipoCliente == INT_CLIENTE_CORPORATIVO) {
                        $objPersona = $this->persona_juridica_model->getPersonaJuridica($idPersona);
                        $datosCliente = trim($objPersona[0]->razon_social);
                    }

                    $correo = $objCotizacion[0]->correo_proveedor;
                    $idPersonaProveedor = $objCotizacion[0]->id_persona_proveedor;                        
                    $objPersona = $this->persona_juridica_model->getPersonaJuridica($idPersonaProveedor);
                    $datosProveedor = trim($objPersona[0]->razon_social);

                    $titulo = 'Aceptación de Cotización';
                    $mensaje = "
                        <p style='text-align: justify'>Le informamos que el N° de Cotización " . $codigo . " fue aceptada por el cliente " . $datosCliente . ".</p>
                        <p style='text-align: justify'>Le sugerimos revisar su Bandeja de Cotizaciones.</p>";
                    $this->mensajeConfirmacion($titulo, $correo, $datosProveedor, $mensaje);
                }
                $lstCotizacionesNoSel = $this->repuesto_x_cotizacion_model->getCotizacionNoSeleccionadas($idSolicitud);
                foreach ($lstCotizacionesNoSel as $idCotizacion) {
                    $objCotizacion = $this->cotizacion_model->getInfoClienteYProveedor($idCotizacion->id_cotizacion);
                    $codigo = formatoNumCaso($objCotizacion[0]->id_cotizacion);                

                    $datosCliente = '';
                    $idPersona = $objCotizacion[0]->id_persona;
                    $tipoCliente = $objCotizacion[0]->id_tipo_cliente;
                    if ($tipoCliente == INT_CLIENTE_INDIVIDUAL) {
                        $objPersona = $this->persona_natural_model->getPersonaNatural($idPersona);
                        $datosCliente = trim($objPersona[0]->nombres . ' ' . $objPersona[0]->apellidos);
                    }
                    if ($tipoCliente == INT_CLIENTE_CORPORATIVO) {
                        $objPersona = $this->persona_juridica_model->getPersonaJuridica($idPersona);
                        $datosCliente = trim($objPersona[0]->razon_social);
                    }

                    $correo = $objCotizacion[0]->correo_proveedor;
                    $idPersonaProveedor = $objCotizacion[0]->id_persona_proveedor;                        
                    $objPersona = $this->persona_juridica_model->getPersonaJuridica($idPersonaProveedor);
                    $datosProveedor = trim($objPersona[0]->razon_social);

                    $titulo = 'Rechazo de Cotización';
                    $mensaje = "
                        <p style='text-align: justify'>Le informamos que el N° de Cotización " . $codigo . " no fue aceptada por el cliente " . $datosCliente . ".</p>
                        <p style='text-align: justify'>Le sugerimos revisar su Bandeja de Cotizaciones.</p>";
                    $this->mensajeConfirmacion($titulo, $correo, $datosProveedor, $mensaje);
                }
            }
            $this->load->view('solicitud/orden_compra_view', $data);
        } else {
            redirect(base_url() . 'index.php');
        }
    }
    
    /**
     * Metodo para obtener la descripción del repuesto seleccionado.
     * @author Fernando Esteban Valerio
     */
    public function descargarPdf() {  
        $idSolicitud = filter_input(INPUT_GET, 'id');
        $numPedido = filter_input(INPUT_GET, 'numPedido');
        
        // Obtener datos de la solicitud
        $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
        $dataUsuario['id_usuario'] = $objSolicitud[0]->id_usuario;
        $objUsuario = $this->usuario_model->getUsuario($dataUsuario);
        $objPersona = $this->persona_model->getIdPersona($objUsuario['id_persona']);

        $idUbigeo = $objPersona[0]->id_ubigeo;
        $objUbigeo = $this->ubigeo_model->getInfoUbigeo($idUbigeo);
        $ubicacion = $objUbigeo[0]->nombre_ubigeo;

        $objPersonaNatural = $this->persona_natural_model->getPersonaNatural($objPersona[0]->id_persona);

        $txtDocumento = '';
        if ($objPersonaNatural[0]->id_tipo_documento == INT_DNI) {
            $txtDocumento = STR_DNI;
        } else {
            $txtDocumento = STR_CARNET_EXTRANJERIA;
        }

        $lugarEntrega = '';
        if ($objSolicitud[0]->entrega_taller == 0) {
            $lugarEntrega = $objSolicitud[0]->otro_taller;
        } else {
            $objTaller = $this->taller_model->getTaller($objSolicitud[0]->id_taller);
            $lugarEntrega = $objTaller[0]->valor_2;
        }
        
        $igv = $objSolicitud[0]->igv;
        
        $simboloMoneda = '';
        if ($objSolicitud[0]->id_moneda == INT_SOLES) {
            $simboloMoneda = STR_SIMBOLO_SOLES;
        } else {
            $simboloMoneda = STR_SIMBOLO_DOLARES;
        }
        
        // Obtener los repuestos cotizados
        $lstRepuestosCotizados = $this->solicitud_model->getRepuestoCotXSolicitud($idSolicitud);
            
        if ($numPedido != '') {
            $numPedido = $numPedido;
        }
        
        $body = '    
        <table style="width: 100%; text-align: center;">
            <tr>
                <td style="width: 75%; text-align: center;">
                    <table>
                        <tr>
                            <td>'.$objPersonaNatural[0]->nombres . ' ' . $objPersonaNatural[0]->apellidos.'</td>
                        </tr>
                        <tr>
                            <td>'.$txtDocumento . ' ' . $objPersonaNatural[0]->nro_documento.'</td>
                        </tr>
                        <tr>
                            <td>'.$objPersona[0]->direccion.'</td>
                        </tr>
                        <tr>
                            <td>'.$ubicacion . ' - PERÚ</td>
                        </tr>
                    </table>
                </td>
                <td style="width: 25%; text-align: right;">
                    <table border="1">
                        <tr>
                            <td>N° de Pedido</td>
                            <td>'.$numPedido.'</td>
                        </tr>
                        <tr>
                            <td>Fecha</td>
                            <td>'.date('d/m/Y').'</td>
                        </tr>
                        <tr>
                            <td>Página</td>
                            <td>1</td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
        <table>
            <thead>
                <tr>
                    <th colspan="7" style="font-size: 14px; font-weight: bold; border-top: 1px solid #000000; border-bottom: 1px solid #000000;">Orden de Compra Nacional</th>
                </tr> 
                <tr>
                    <th style="text-align: left; font-weight: bold;">ITEM</th>
                    <th style="text-align: left; font-weight: bold;">CODIGO</th>
                    <th style="text-align: left; font-weight: bold;">PROVEEDOR</th>
                    <th style="text-align: left; font-weight: bold;">REPUESTO</th>
                    <th style="text-align: right; font-weight: bold;">CANTIDAD</th>
                    <th style="text-align: right; font-weight: bold;">PRECIO UNIT</th>
                    <th style="text-align: right; font-weight: bold;">TOTAL</th>
                </tr>
            </thead>
            <tbody>';
            
        $fila = '';
        $total = 0;
        $item = 1;
        foreach ($lstRepuestosCotizados as $objRepuesto) {
            $total += $objRepuesto->total; 
            $fila .= '
            <tr>
                <td>'.$item++.'</td>
                <td>'.$objRepuesto->codigo.'</td>
                <td>'.$objRepuesto->razon.'</td>
                <td>'.$objRepuesto->nombre.'</td>
                <td style="text-align: right;">'.$objRepuesto->cantidad.'</td>
                <td style="text-align: right;">'.number_format($objRepuesto->precio, 2).'</td>
                <td style="text-align: right;">'.number_format($objRepuesto->total, 2).'</td>
            </tr>';
        }
        $body .= $fila;
        $body .= '
            </tbody>
        </table>';
        
        if ($igv == 0) {
            $body .= '
        <table style="text-align: right;">
            <tr>   
                <td colspan="5" style="width: 380px;"></td>
                <td style="font-weight: bold; width: 200px;">Valor en Nuevos Soles</td>
                <td style="float: right;">'.$simboloMoneda.number_format(($total  - $total * INT_IGV), 2).'</td>
            </tr>
            <tr>
                <td colspan="5" style="width: 380px;"></td>
                <td style="font-weight: bold; width: 200px;">IGV 18%</td>
                <td style="float: right;">'.$simboloMoneda.number_format(($total * INT_IGV), 2).'</td>
            </tr>
            <tr>
                <td colspan="5" style="width: 380px;"></td>
                <td style="font-weight: bold; width: 200px;">Valor en Total Nuevos Soles</td>
                <td style="float: right;">'.$simboloMoneda.number_format($total, 2).'</td>
            </tr>
        </table>';
        } else {
            $body .= '
        <table style="text-align: right;">
            <tr>   
                <td colspan="5" style="width: 380px;"></td>
                <td style="font-weight: bold; width: 200px;">Valor en Nuevos Soles</td>
                <td style="float: right;">'.$simboloMoneda.number_format($total, 2).'</td>
            </tr>
            <tr>
                <td colspan="5" style="width: 380px;"></td>
                <td style="font-weight: bold; width: 200px;">Valor en Total Nuevos Soles</td>
                <td style="float: right;">'.$simboloMoneda.number_format($total, 2).'</td>
            </tr>
        </table>';
        }
        $body .= '
        <table>
            <tr>
                <td>Lugar de Entrega: '.$lugarEntrega.'</td>
            </tr>            
        </table>';
        
        $file = "orden_compra_". date("Y-m-d");
        $newFile = '/tmp/' . $file . '.pdf';
        include("mdf/mpdf.php");
        $mpdf = new mPDF();
        $mpdf->WriteHTML($body);
        $mpdf->Output($newFile);

        header("Content-Disposition: filename=\"$newFile\"");
        header('Content-type: application/pdf');
        readfile($newFile);

        exit;
    }

    /**
     * Metodo para mostrar la dirección del taller.
     * @author Fernando Esteban Valerio
     */
    public function mostrarDirTaller() {
        $direccion = '';
        $idTaller = filter_input(INPUT_POST, 'idTaller');
        $lstTaller = $this->taller_model->getTaller($idTaller);
        foreach ($lstTaller as $data) {
            $direccion = $data->valor_2;
        }
        echo $direccion;
    }

    /**
     * Metodo para deshacer los cambios en el listado de repuestos.
     * @author Fernando Esteban Valerio
     */
    public function deshacerCambiosRepuesto() {
        $lstOA = array();
        $lstOA['O'] = STR_INICIAL_ORIGINAL;
        $lstOA['A'] = STR_INICIAL_ALTERNATIVO;

        $idModelo = filter_input(INPUT_POST, 'idModelo');
        $idTipoCarroceria = filter_input(INPUT_POST, 'idTipoCarroceria');

        $lstRepuesto = $this->repuesto_model->getListRepuesto($idModelo, $idTipoCarroceria);

        $cadena = '
            <tr>
                <th></th>
                <th style="text-align: left;">Repuesto*</th>
                <th style="text-align: left;">#Parte</th>
                <th title="O => ORIGINAL&#13;A => ALTERNATIVO" style="text-align: left;">O/A*</th>
                <th style="text-align: left;">Descripción</th>
                <th style="text-align: left;">Cantidad*</th>
                <th style="text-align: left;">Foto</th>
                <th></th>
            </tr>
            <tr id="fila1">
                <td><input type="checkbox" id="casilla1" name="casilla[]" value="1" class="opcion"/></td>
                <td>
                    <select id="repuesto1" name="repuesto[]" required>
                        <option value="">' . STR_VALOR_INICIAL . '</option>';

        $fila = '';
        foreach ($lstRepuesto as $data) {
            $fila .= '<option value="' . $data->id_repuesto . '">' . $data->nombre . '</option>';
        }
        $cadena .= $fila;

        $cadena .= '
                    </select>                   
                </td>
                <td>
                    <input type="text" placeholder="" maxlength="20" id="numParte1" name="numParte[]" onkeyup="javascript:this.value=this.value.toUpperCase()"/>
                </td>
                <td>
                    <select id="tipo" name="tipo[]" required>';

        $fila = '';
        foreach ($lstOA as $key => $value) {
            $titulo = '';
            if ($key == 0) {
                $titulo = STR_ORIGINAL;
            } else {
                $titulo = STR_ALTERNATIVO;
            }
            $fila .= '<option value="' . $key . '" title="' . $titulo . '">' . $value . '</option>';
        }
        $cadena .= $fila;

        $cadena .= '</select>
                </td>
                <td><input type="text" placeholder="" id="descripcion1" name="descripcion[]" maxlength="20" onkeyup="javascript:this.value=this.value.toUpperCase()"/></td>
                <td><input type="text" placeholder="" id="cantidad1" name="cantidad[]" maxlength="4" style="width: 60px;" required onkeypress="return soloNumeros(event)"/></td>
                <td>
                    <label class="fileContainer">
                        <label class="button">Examinar</label><input type="file" id="fotoRepuesto1" name="fotoRepuesto[]"/>
                        <div>
                            <label id="uploadFile1" placeholder="Choose File" disabled="disabled"></label>
                        </div>
                    </label>
                    <script type="text/javascript">
                        document.getElementById("fotoRepuesto1").onchange = function () {
                            $("#uploadFile1").text(this.value);
                        };
                    </script>
                </td>
                <td></td>
            </tr>';
        echo $cadena;
    }

    /**
     * Metodo para agregar una fila al formulario.
     * @author Fernando Esteban Valerio
     */
    public function agregarRepuesto() {
        $lstOA = array();
        $lstOA['O'] = STR_INICIAL_ORIGINAL;
        $lstOA['A'] = STR_INICIAL_ALTERNATIVO;

        $idModelo = filter_input(INPUT_POST, 'idModelo');
        $idTipoCarroceria = filter_input(INPUT_POST, 'idTipoCarroceria');

        $lstRepuesto = $this->repuesto_model->getListRepuesto($idModelo, $idTipoCarroceria);

        $numFilas = filter_input(INPUT_POST, 'numFilas') + 1;

        $cadena = '
        <tr id="fila' . $numFilas . '">
            <td>
                <input type="checkbox" id="casilla' . $numFilas . '" name="casilla[]" value="' . $numFilas . '" class="opcion"/>
                <input type="hidden" id="idRepuesto' . $numFilas . '" name="idRepuesto[]" value=""/>
                <input type="hidden" id="idSolicitud" name="idSolicitud[]" value=""/>
           </td>
            <td>
                <select id="repuesto' . $numFilas . '" name="repuesto[]" required>
                    <option value="">' . STR_VALOR_INICIAL . '</option>';

        $fila = '';
        foreach ($lstRepuesto as $data) {
            $fila .= '<option value="' . $data->id_repuesto . '">' . $data->nombre . '</option>';
        }
        $cadena .= $fila;
        $cadena .= '
                </select>                
            </td>
            <td><input type="text" placeholder="" maxlength="20" id="numParte' . $numFilas . '" name="numParte[]" onkeyup="javascript:this.value=this.value.toUpperCase()"/></td>
            <td>
                <select id="tipo" name="tipo[]">';

        $fila = '';
        foreach ($lstOA as $key => $value) {
            $titulo = '';
            if ($key == 0) {
                $titulo = STR_ORIGINAL;
            } else {
                $titulo = STR_ALTERNATIVO;
            }
            $fila .= '<option value="' . $key . '" title="' . $titulo . '">' . $value . '</option>';
        }
        $cadena .= $fila;
        $cadena .= '
                </select>
            </td>';

        $cadena .= '
            <td><input type="text" placeholder="" id="descripcion' . $numFilas . '" name="descripcion[]" maxlength="20" onkeyup="javascript:this.value=this.value.toUpperCase()"/></td>
            <td><input type="text" placeholder="" id="cantidad' . $numFilas . '" name="cantidad[]" maxlength="4" style="width: 60px;" required onkeypress="return soloNumeros(event)"/></td>
            <td>
                <label class="fileContainer">
                    <label class="button">Examinar</label><input type="file" id="fotoRepuesto' . $numFilas . '" name="fotoRepuesto[]"/>
                    <div>
                        <label id="uploadFile' . $numFilas . '" placeholder="Choose File" disabled="disabled"></label>
                    </div>
                </label>
                <script type="text/javascript">
                    document.getElementById("fotoRepuesto' . $numFilas . '").onchange = function () {
                        $("#uploadFile' . $numFilas . '").text(this.value);
                    };
                </script>
            </td>
            <td></td>
        </tr>';

        echo $cadena;
    }

    /**
     * Metodo para realizar la valoración del proveedor
     * @author Fernando Esteban Valerio
     */
    public function valorar() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != "") {
            $data['codigo'] = '';
            $data['valorBoton'] = '';
            $data['mensaje'] = '';
            $data['class'] = '';
            $data['soloLectura'] = true;
            $data['lectura'] = 'disabled="disabled"';
            $data['valorInicial'] = STR_VALOR_INICIAL;
            $data['tituloO'] = STR_ORIGINAL;
            $data['tituloA'] = STR_ALTERNATIVO;
            $data['indLectura'] = '';
            $data['numProveedores'] = 0;
            $data['objMarca'] = NULL;
            $data['page_title'] = 'Valoración de Proveedor';

            if ($this->input->post()) {
                $lstMoneda = $this->moneda_model->getListMoneda();
                $lstMarca = $this->marca_model->getListMarca();
                $lstTipoCarroceria = $this->tipo_carroceria_model->getListTipoCarroceria();
                $lstTaller = $this->taller_model->getListTaller();
                $lstAnho = listarAnho();

                // Entrega en Taller
                $lstEntrega = array();
                $lstEntrega[0] = STR_NO;
                $lstEntrega[1] = STR_SI;

                $data['lstMoneda'] = $lstMoneda;
                $data['lstMarca'] = $lstMarca;
                $data['lstTipoCarroceria'] = $lstTipoCarroceria;
                $data['lstAnho'] = $lstAnho;
                $data['lstEntrega'] = $lstEntrega;
                $data['lstTaller'] = $lstTaller;

                $idEstado = INT_COT_ESTADO_ORDEN_GENERADA;
                $idSolicitud = filter_input(INPUT_POST, 'numCaso') * 1;
                $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud, $idEstado);
                if (count($arrCotizaciones) == 0) {
                    $data['codigo'] = '';
                    $data['mensaje'] = 'El número de solicitud no está registrado en el sistema';
                    $data['class'] = "alert_warning";
                    $data['idSolicitud'] = $idSolicitud;
                    $data['lstRepuestoXProveedor'] = array();
                    $data['numProveedores'] = 0;
                    $data['idSolicitud'] = 0;
                    $data['objSolicitud'] = NULL;
                    $data['lstModelo'] = array();
                } else {
                    $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                    $objModelo = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                    $objMarca = $this->marca_model->getMarca($objModelo[0]->id_marca);
                    $lstModelo = $this->modelo_model->getListModelo($objMarca[0]->id_marca);

                    $data['codigo'] = formatoNumCaso($idSolicitud);
                    $data['idSolicitud'] = $idSolicitud;
                    $data['objSolicitud'] = $objSolicitud;
                    $data['objMarca'] = $objMarca;
                    $data['lstModelo'] = $lstModelo;

                    $lstRepuestoXProveedor = $this->cotizacion_model->getDetRepuestoXProveedor($idSolicitud);
                    $data['lstRepuestoXProveedor'] = $lstRepuestoXProveedor;
                    $data['numProveedores'] = count($lstRepuestoXProveedor);
                }
            } else {
                $data['idSolicitud'] = 0;
                $data['objSolicitud'] = null;
                $data['lstMoneda'] = array();
                $data['lstMarca'] = array();
                $data['lstTipoCarroceria'] = array();
                $data['lstEntrega'] = array();
                $data['lstTaller'] = array();
                $data['lstAnho'] = array();
                $data['lstModelo'] = array();
                $data['lstRepuestoXProveedor'] = array();
                $data['numProveedores'] = 0;
                $data['valorBoton'] = 'disabled="disabled"';
            }
            $this->load->view('solicitud/solicitud_value_view', $data);
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /**
     * Metodo para registrar un nueva solicitud.
     * @author Fernando Esteban Valerio
     */
    public function nuevo() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != '') {
            $lstTipoCarroceria = $this->tipo_carroceria_model->getListTipoCarroceria();
            $lstMoneda = $this->moneda_model->getListMoneda();
            $lstMarca = $this->marca_model->getListMarca();
            $lstTaller = $this->taller_model->getListTaller();
            $lstAnho = listarAnho();
            $lstRepuesto = array();

            $lstTipo = array();
            $lstTipo['O'] = STR_INICIAL_ORIGINAL;
            $lstTipo['A'] = STR_INICIAL_ALTERNATIVO;

            $lstEntrega = array();
            $lstEntrega[0] = STR_NO;
            $lstEntrega[1] = STR_SI;

            $data = array(
                'lstMoneda' => $lstMoneda,
                'lstMarca' => $lstMarca,
                'lstTipoCarroceria' => $lstTipoCarroceria,
                'lstRepuesto' => $lstRepuesto,
                'lstTipo' => $lstTipo,
                'lstEntrega' => $lstEntrega,
                'lstTaller' => $lstTaller,
                'lstAnho' => $lstAnho,
                'valorInicial' => STR_VALOR_INICIAL,
                'tituloO' => STR_ORIGINAL,
                'tituloA' => STR_ALTERNATIVO
            );
            $idSolicitud = filter_input(INPUT_GET, 'id');
            if ($idSolicitud == '') {
                $idSolicitud = 0;
            }
            $data['idSolicitud'] = $idSolicitud;
            $data['codigo'] = '';
            $data['soloLectura'] = false;
            $data['soloLecturaSuspendida'] = false;
            $data['lectura'] = '';
            $data['page_title'] = 'Solicitud';
            $data['direccion'] = '';

            if ($this->input->post()) {
                $idSolicitudActual = filter_input(INPUT_POST, 'id');
                $dataSolicitud['id_usuario'] = $sessionData['id'];
                $dataSolicitud['igv'] = filter_input(INPUT_POST, 'igv');
                $dataSolicitud['id_moneda'] = filter_input(INPUT_POST, 'moneda');
                $dataSolicitud['id_tipo_carroceria'] = filter_input(INPUT_POST, 'tipoCarroceria');
                $dataSolicitud['id_marca'] = filter_input(INPUT_POST, 'marca');
                $dataSolicitud['id_modelo'] = filter_input(INPUT_POST, 'modelo');
                $dataSolicitud['anho'] = filter_input(INPUT_POST, 'anho');
                $dataSolicitud['placa'] = filter_input(INPUT_POST, 'placa');
                $dataSolicitud['vin'] = filter_input(INPUT_POST, 'vin');
                $dataSolicitud['version'] = filter_input(INPUT_POST, 'version');
                $dataSolicitud['foto_vehiculo'] = '';
                $uploaddir = self::STR_DIRECTORIO_IMAGENES . date('YmdHis');
                if (isset($_FILES['fotoAutomovil'])) {
                    if (move_uploaded_file($_FILES['fotoAutomovil']['tmp_name'], $uploaddir . $_FILES['fotoAutomovil']['name'])) {
                        $dataSolicitud['foto_vehiculo'] = $uploaddir . $_FILES['fotoAutomovil']['name'];
                    }
                }
                $opcBoton = filter_input(INPUT_POST, 'boton');
                if ($opcBoton == self::STR_IND_ENVIADA) {
                    $dataSolicitud['id_estado'] = INT_ESTADO_ENVIADA;
                }
                if ($opcBoton == self::STR_IND_SUSPENDIDA) {
                    $dataSolicitud['id_estado'] = INT_ESTADO_SUSPENDIDA;
                }
                $dataSolicitud['fecha_registro'] = date('Y-m-d');
                $dataSolicitud['entrega_taller'] = filter_input(INPUT_POST, 'entregaTaller');
                if ($dataSolicitud['entrega_taller'] == 0) {
                    $dataSolicitud['id_taller'] = INT_TALLER_VACIO;
                    $dataSolicitud['otro_taller'] = filter_input(INPUT_POST, 'dirOtroLugar');
                } else {
                    $dataSolicitud['id_taller'] = filter_input(INPUT_POST, 'idTaller');
                    $dataSolicitud['otro_taller'] = '';
                }

                // Inicializar la transaccion
                $this->db->trans_begin();

                $idSolicitudNueva = 0;
                if ($idSolicitudActual == 0) {
                    $dataSolicitud['usuario_creacion'] = $sessionData['id'];
                    $dataSolicitud['fecha_creacion'] = date('Y-m-d H:i:s');

                    $this->solicitud_model->insert($dataSolicitud);
                    $idSolicitudNueva = $this->solicitud_model->getLastInserted();
                } else {
                    $dataSolicitud['usuario_modificacion'] = $sessionData['id'];
                    $dataSolicitud['fecha_modificacion'] = date('Y-m-d H:i:s');
                    $dataSolicitud['id_solicitud'] = $idSolicitudActual;

                    $this->solicitud_model->update($dataSolicitud);
                }
                // Nueva Solicitud
                if ($idSolicitudActual == 0) {
                    $numFilas = filter_input(INPUT_POST, 'numFilas');
                    if ($numFilas > 0) {
                        $uploaddir = self::STR_DIRECTORIO_IMAGENES . date('YmdHis');

                        // Registrar los repuestos asociados a la solicitud
                        for ($iPosition = 0; $iPosition < $numFilas; $iPosition++) {
                            $dataRepuesto['id_solicitud'] = $idSolicitudNueva;
                            $dataRepuesto['id_repuesto'] = $_POST['repuesto'][$iPosition];
                            $dataRepuesto['numero_parte'] = $_POST['numParte'][$iPosition];
                            $dataRepuesto['tipo'] = $_POST['tipo'][$iPosition];
                            $dataRepuesto['descripcion'] = $_POST['descripcion'][$iPosition];
                            $dataRepuesto['cantidad'] = $_POST['cantidad'][$iPosition];
                            $dataRepuesto['foto_repuesto'] = '';

                            if (isset($_FILES['fotoRepuesto'])) {
                                if (move_uploaded_file($_FILES['fotoRepuesto']['tmp_name'][$iPosition], $uploaddir . $_FILES['fotoRepuesto']['name'][$iPosition])) {
                                    $dataRepuesto['foto_repuesto'] = $uploaddir . $_FILES['fotoRepuesto']['name'][$iPosition];
                                }
                            }
                            $dataRepuesto['id_estado'] = INT_ESTADO_ACTIVO;
                            $dataRepuesto['usuario_registro'] = $sessionData['id'];
                            $dataRepuesto['fecha_registro'] = date('Y-m-d H:i:s');
                            $this->repuesto_x_solicitud_model->insert($dataRepuesto);
                        }
                        $data['codigo'] = formatoNumCaso($idSolicitudNueva);

                        // Opción: Enviar
                        if ($opcBoton == self::STR_IND_ENVIADA) {
                            $objMarca = $this->marca_model->getMarca($dataSolicitud['id_marca']);
                            $objModelo = $this->modelo_model->getModelo($dataSolicitud['id_modelo']);

                            // Obtener lista de proveedores
                            $lstProveedor = $this->proveedor_model->getListProveedor();
                            foreach ($lstProveedor as $objProveedor) {
                                // Registrar la cotizacion
                                $dataCotizacion['id_solicitud'] = $idSolicitudNueva;
                                $dataCotizacion['id_usuario'] = $objProveedor->id_usuario;
                                $dataCotizacion['id_estado'] = INT_ESTADO_PEND_RESP;
                                $dataCotizacion['usuario_registro'] = $sessionData['id'];
                                $dataCotizacion['fecha_registro'] = date('Y-m-d H:i:s');
                                $this->cotizacion_model->insert($dataCotizacion);
                                $idCotizacionNueva = $this->cotizacion_model->getLastInserted();

                                for ($iPosition = 0; $iPosition < $numFilas; $iPosition++) {
                                    $dataRepuesto['id_cotizacion'] = $idCotizacionNueva;
                                    $dataRepuesto['id_repuesto'] = $_POST['repuesto'][$iPosition];
                                    $dataRepuesto['id_solicitud'] = $idSolicitudNueva;
                                    $dataRepuesto['cantidad'] = $_POST['cantidad'][$iPosition];
                                    $dataRepuesto['usuario_registro'] = $sessionData['id'];
                                    $dataRepuesto['fecha_registro'] = date('Y-m-d H:i:s');
                                    $this->repuesto_x_cotizacion_model->insert($dataRepuesto);
                                }

                                // Obtener los responsables asociados a un proveedor
                                $lstResponsable = $this->responsable_model->getListResponsable($objProveedor->id_persona);
                                foreach ($lstResponsable as $objResponsable) {
                                    $datosResponsable = trim($objResponsable->nombres . ' ' . $objResponsable->apellidos);

                                    // Enviar correo a los responsables asociado a un proveedor
                                    $this->mensaje($objResponsable->correo, $datosResponsable, $data['codigo'], $objMarca[0]->nombre, $objModelo[0]->nombre, $dataSolicitud['anho']);
                                }
                                if ($objProveedor->correo != '') {
                                    // Enviar correo al proveedor
                                    $datosResponsable = $objProveedor->razon_social;
                                    $this->mensaje($objProveedor->correo, $datosResponsable, $data['codigo'], $objMarca[0]->nombre, $objModelo[0]->nombre, $dataSolicitud['anho']);
                                }
                            }
                        }
                        $resultado = self::INT_OPC_REGISTRAR;
                    }
                    $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitudNueva);
                    $objMarca = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                    $lstModelo = $this->modelo_model->getListModelo($objMarca[0]->id_marca);

                    $data['objMarca'] = $objMarca;
                    $data['objSolicitud'] = $objSolicitud;
                    $data['lstModelo'] = $lstModelo;
                    $data['soloLectura'] = true;
                    $data['soloLecturaSuspendida'] = true;
                    $data['lectura'] = 'disabled="disabled"';

                    $lstRepuesto = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitudNueva);
                    $data['lstRepuesto'] = $lstRepuesto;
                    $data['idSolicitud'] = $idSolicitudNueva;
                    $data['numFilas'] = count($lstRepuesto);
                    $lstTaller = $this->taller_model->getTaller($objSolicitud[0]->id_taller);
                    foreach ($lstTaller as $dataTaller) {
                        $data['direccion'] = $dataTaller->valor_2;
                    }
                } else {
                    // Obtener los repuestos asociados a una solicitud
                    $lstRepuesto = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitudActual);
                    $numFilas = filter_input(INPUT_POST, 'numFilas');
                    $lstRepuestoNoEliminar = '';
                    $uploaddir = self::STR_DIRECTORIO_IMAGENES . date('YmdHis');

                    // En caso se desee registrar los repuestos a lo registrado inicialmente.
                    if ($numFilas > 0) {
                        for ($iPosition = 0; $iPosition < $numFilas; $iPosition++) {
                            $idRepuestoTmp = $_POST['repuesto'][$iPosition];
                            $idSolicitudTmp = $idSolicitudActual;

                            // Actualizar los repuestos actuales de una solicitud
                            $existeRepuesto = 0;
                            foreach ($lstRepuesto as $dataRepuestoOriginal) {
                                if ($dataRepuestoOriginal->id_repuesto == $idRepuestoTmp && $dataRepuestoOriginal->id_solicitud == $idSolicitudTmp) {
                                    $dataRepuesto['id_repuesto'] = $_POST['repuesto'][$iPosition];
                                    $dataRepuesto['id_solicitud'] = $idSolicitudActual;
                                    $dataRepuesto['numero_parte'] = $_POST['numParte'][$iPosition];
                                    $dataRepuesto['tipo'] = $_POST['tipo'][$iPosition];
                                    $dataRepuesto['descripcion'] = $_POST['descripcion'][$iPosition];
                                    $dataRepuesto['cantidad'] = $_POST['cantidad'][$iPosition];

                                    $dataRepuesto['foto_repuesto'] = '';
                                    if (isset($_FILES['fotoRepuesto'])) {
                                        if (move_uploaded_file($_FILES['fotoRepuesto']['tmp_name'][$iPosition], $uploaddir . $_FILES['fotoRepuesto']['name'][$iPosition])) {
                                            $dataRepuesto['foto_repuesto'] = $uploaddir . $_FILES['fotoRepuesto']['name'][$iPosition];
                                        }
                                    } else {
                                        $dataRepuesto['foto_repuesto'] = $dataRepuestoOriginal['foto_repuesto'];
                                    }
                                    $dataRepuesto['usuario_modificacion'] = $sessionData['id'];
                                    $dataRepuesto['fecha_modificacion'] = date('Y-m-d H:i:s');
                                    $this->repuesto_x_solicitud_model->update($dataRepuesto);
                                    $existeRepuesto = 1;
                                    $lstRepuestoNoEliminar .= $idRepuestoTmp . ',';
                                }
                            }
                            // En caso se agregue un repuesto nuevo a la solicitud
                            if (!$existeRepuesto) {
                                $dataRepuesto['id_repuesto'] = $_POST['repuesto'][$iPosition];
                                $dataRepuesto['id_solicitud'] = $idSolicitudActual;
                                $dataRepuesto['numero_parte'] = $_POST['numParte'][$iPosition];
                                $dataRepuesto['tipo'] = $_POST['tipo'][$iPosition];
                                $dataRepuesto['descripcion'] = $_POST['descripcion'][$iPosition];
                                $dataRepuesto['cantidad'] = $_POST['cantidad'][$iPosition];

                                $dataRepuesto['foto_repuesto'] = '';
                                if (isset($_FILES['fotoRepuesto'])) {
                                    if (move_uploaded_file($_FILES['fotoRepuesto']['tmp_name'][$iPosition], $uploaddir . $_FILES['fotoRepuesto']['name'][$iPosition])) {
                                        $dataRepuesto['foto_repuesto'] = $uploaddir . $_FILES['fotoRepuesto']['name'][$iPosition];
                                    }
                                }
                                $dataRepuesto['id_estado'] = INT_ESTADO_ACTIVO;
                                $dataRepuesto['usuario_registro'] = $sessionData['id'];
                                $dataRepuesto['fecha_registro'] = date('Y-m-d H:i:s');
                                $this->repuesto_x_solicitud_model->insert($dataRepuesto);
                                $lstRepuestoNoEliminar .= $idRepuestoTmp . ',';
                            }
                        }
                        if ($lstRepuestoNoEliminar != '') {
                            $lngCadena = strlen($lstRepuestoNoEliminar);
                            $lstRepuestoNoEliminar = substr($lstRepuestoNoEliminar, 0, $lngCadena - 1);
                            $this->repuesto_x_solicitud_model->eliminarRepuestoXSolicitud($idSolicitudActual, $lstRepuestoNoEliminar);
                        }
                    }
                    // Opción: Enviar
                    if ($opcBoton == self::STR_IND_ENVIADA) {
                        $objMarca = $this->marca_model->getMarca($dataSolicitud['id_marca']);
                        $objModelo = $this->modelo_model->getModelo($dataSolicitud['id_modelo']);

                        // Obtener lista de proveedores
                        $lstProveedor = $this->proveedor_model->getListProveedor();
                        foreach ($lstProveedor as $objProveedor) {
                            // Registrar la cotizacion
                            $dataCotizacion['id_solicitud'] = $idSolicitudActual;
                            $dataCotizacion['id_usuario'] = $objProveedor->id_usuario;
                            $dataCotizacion['id_estado'] = INT_ESTADO_PEND_RESP;
                            $dataCotizacion['usuario_registro'] = $sessionData['id'];
                            $dataCotizacion['fecha_registro'] = date('Y-m-d H:i:s');
                            $this->cotizacion_model->insert($dataCotizacion);
                            $idCotizacionNueva = $this->cotizacion_model->getLastInserted();

                            for ($iPosition = 0; $iPosition < $numFilas; $iPosition++) {
                                $dataRepuesto['id_cotizacion'] = $idCotizacionNueva;
                                $dataRepuesto['id_repuesto'] = $_POST['repuesto'][$iPosition];
                                $dataRepuesto['id_solicitud'] = $idSolicitudActual;
                                $dataRepuesto['cantidad'] = $_POST['cantidad'][$iPosition];
                                $dataRepuesto['usuario_registro'] = $sessionData['id'];
                                $dataRepuesto['fecha_registro'] = date('Y-m-d H:i:s');
                                $this->repuesto_x_cotizacion_model->insert($dataRepuesto);
                            }

                            // Obtener los responsables asociados a un proveedor
                            $lstResponsable = $this->responsable_model->getListResponsable($objProveedor->id_persona);
                            foreach ($lstResponsable as $objResponsable) {
                                $datosResponsable = trim($objResponsable->nombres . ' ' . $objResponsable->apellidos);

                                // Enviar correo a los responsables asociado a un proveedor
                                $this->mensaje($objResponsable->correo, $datosResponsable, $data['codigo'], $objMarca[0]->nombre, $objModelo[0]->nombre, $dataSolicitud['anho']);
                            }
                            if ($objProveedor->correo != '') {
                                // Enviar correo al proveedor
                                $datosResponsable = $objProveedor->razon_social;
                                $this->mensaje($objProveedor->correo, $datosResponsable, $data['codigo'], $objMarca[0]->nombre, $objModelo[0]->nombre, $dataSolicitud['anho']);
                            }
                        }
                    }
                    $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitudActual);
                    $objMarca = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                    $lstModelo = $this->modelo_model->getListModelo($objMarca[0]->id_marca);

                    $data['codigo'] = formatoNumCaso($idSolicitudActual);
                    $data['objMarca'] = $objMarca;
                    $data['objSolicitud'] = $objSolicitud;
                    $data['lstModelo'] = $lstModelo;
                    $data['soloLectura'] = true;
                    $data['soloLecturaSuspendida'] = true;
                    $data['lectura'] = 'disabled="disabled"';
                    $lstTaller = $this->taller_model->getTaller($objSolicitud[0]->id_taller);
                    foreach ($lstTaller as $dataTaller) {
                        $data['direccion'] = $dataTaller->valor_2;
                    }
                    $lstRepuesto = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitudActual);
                    $data['lstRepuesto'] = $lstRepuesto;
                    $data['idSolicitud'] = $idSolicitudActual;
                    $data['numFilas'] = count($lstRepuesto);
                    $resultado = self::INT_OPC_ACTUALIZAR;
                }
                if ($this->db->trans_status() == 0) {
                    $this->db->trans_rollback();
                } else {
                    $this->db->trans_commit();
                }
                switch ($resultado) {
                    case self::INT_OPC_REGISTRAR:
                        $data['mensaje'] = "La operación se realizó satisfactoriamente.";
                        $data['class'] = "alert_success";
                        break;

                    case self::INT_OPC_ACTUALIZAR:
                        $data['mensaje'] = "La operación se realizó satisfactoriamente.";
                        $data['class'] = "alert_success";
                        break;

                    case self::INT_OPC_ANULAR:
                        $data['mensaje'] = "La operación se realizó satisfactoriamente.";
                        $data['class'] = "alert_success";
                        break;
                }
            } else {
                $data['id'] = 0;
                $data['mensaje'] = '';
                $data['class'] = '';
                $data['numFilas'] = 1;
                $data['objMarca'] = '';

                if ($idSolicitud > 0) {
                    $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                    $objMarca = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                    $lstModelo = $this->modelo_model->getListModelo($objMarca[0]->id_marca);

                    $data['objMarca'] = $objMarca;
                    $data['objSolicitud'] = $objSolicitud;
                    $data['lstModelo'] = $lstModelo;
                    $data['codigo'] = formatoNumCaso($idSolicitud);

                    // Estado es REGISTRADO
                    $estadoSolicitud = $objSolicitud[0]->id_estado;
                    if ($estadoSolicitud != INT_ESTADO_SUSPENDIDA) {
                        $data['soloLectura'] = true;
                        $data['soloLecturaSuspendida'] = true;
                        $data['lectura'] = 'disabled="disabled"';
                    } else {
                        $data['soloLecturaSuspendida'] = false;
                        $opcSoloLectura = filter_input(INPUT_GET, 'lectura');
                        if ($opcSoloLectura == '1') {
                            $data['lectura'] = 'disabled="disabled"';
                            $data['soloLecturaSuspendida'] = true;
                        }
                    }
                    $lstTaller = $this->taller_model->getTaller($objSolicitud[0]->id_taller);
                    foreach ($lstTaller as $dataTaller) {
                        $data['direccion'] = $dataTaller->valor_2;
                    }
                    $lstRepuesto = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitud);
                    $data['lstRepuesto'] = $lstRepuesto;
                    $data['numFilas'] = count($lstRepuesto);
                }
            }
            $this->load->view('solicitud/solicitud_edit_view', $data);
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /**
     * Metodo para enviar un correo de notificación a los proveedores.
     * @param string $correo Correo de cada responsable de cada proveedor
     * @param string $datosResponsable Datos del responsable
     * @param string $codigo Código de la solicitud
     * @param string $nomMarca Nombre de la marca
     * @param string $nomModelo Nombre del modelo
     * @param string $anho Año
     */
    private function mensaje($correo, $datosResponsable, $codigo, $nomMarca, $nomModelo, $anho) {
        $this->load->library('email');
        $this->email->from('tu_direccion@bizarq.com', 'Administrador');
        $this->email->to($correo);

        $logo = "http://www.bizarq.com/ProyectoRespuestock/images/repuestock.png";
        $asunto = "Nueva Solicitud - Repuestock";
        $contenido = "
        <table border='0' width='800px'>
        <tr>
            <td style='height: 80px' colspan='3'><img src='" . $logo . "' border='0' width='225px' height='75px'></td>
        </tr>
        <tr>
            <td style='height: 10px' colspan='3'></td>
        </tr>
        <tr>
            <td style='vertical-align: top' colspan='3'>
            <table cellpadding='0' cellspacing='5' border='0' width='500' align='left'>
            <tr>
                <th colspan='3' style='font-weight: bold;'><h1><strong>Nueva Solicitud</strong></h1></th>
            </tr>
            <tr>
                <td style='font-family:Arial; color:#333333; font-size:12px; text-align:justify' colspan='3'>
                Estimado(a) " . $datosResponsable . "
                <p style='text-align: justify'>Le informamos que existe una Cotización con Caso " . $codigo . ",
                enviada por un Cliente</p>
                <p style='text-align: justify'>Para una:</p>
                </td>
            </tr>
            <tr>
                <td>Marca</td>
                <td>Modelo</td>
                <td>Año</td>
            </tr>
            <tr>
                <td>" . $nomMarca . "</td>
                <td>" . $nomModelo . "</td>
                <td>" . $anho . "</td>
            </tr>
            </table>
        </tr>
        <tr>
            <td colspan='3'><p style='text-align: justify'>Sugerimos revisar su Bandeja de Cotizaciones.</p></td>
        </tr>
        <tr>
            <td colspan='3' style='float: right'><a href='http://www.bizarq.com/ProyectoRespuestock'>www.repuestock.com.pe</a></td>
        </tr>
        </table>";
        $this->email->subject($asunto);
        $this->email->message($contenido);
        $this->email->send();
    }

    /**
     * Metodo para enviar mensaje a proveedor
     * @author Fernando Esteban Valerio
     * @param string $titulo Titulo del correo
     * @param string $correo Correo del cliente
     * @param string $datosProveedor Datos del proveedor
     * @param string $mensaje Mensaje del correo
     */
    private function mensajeConfirmacion($titulo, $correo, $datosProveedor, $mensaje) {
        $this->load->library('email');
        $this->email->from('tu_direccion@bizarq.com', 'Administrador');
        $this->email->to($correo);       

        $logo = "http://www.bizarq.com/ProyectoRespuestock/images/repuestock.png";
        $asunto = $titulo . " - Repuestock";
        $contenido = "
        <table border='0' width='800px'>
        <tr>
            <td style='height: 80px' colspan='3'><img src='" . $logo . "' border='0' width='225px' height='75px'></td>
        </tr>
        <tr>
            <td style='height: 10px' colspan='3'></td>
        </tr>
        <tr>
            <td style='vertical-align: top' colspan='3'>
            <table cellpadding='0' cellspacing='5' border='0' width='800' align='left'>
            <tr>
                <th colspan='3'style='font-weight: bold;'><h1><strong>" . $titulo . "</strong></h1></th>
            </tr>
            <tr>
                <td style='font-family:Arial; color:#333333; font-size:12px; text-align:justify' colspan='3'>
                Estimado(a) " . $datosProveedor . $mensaje . "
                </td>
            </tr>
            </table>
        </tr>
        <tr>
            <td colspan='3' style='float: right'><a href='http://www.bizarq.com/ProyectoRespuestock'>www.repuestock.com.pe</a></td>
        </tr>
        </table>";
        $this->email->subject($asunto);
        $this->email->message($contenido);
        $this->email->send();
    }
    
    /**
     * Metodo para deshacer seleccion de repuestos cotizados por el cliente.
     * @author Fernando Esteban Valerio
     */
    public function deshacerCotizacion() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != "") {
            $idSolicitud = filter_input(INPUT_POST, 'idSolicitud');
            $data['seleccionado'] = 0;
            $data['usuario_modificacion'] = $sessionData['id'];
            $data['fecha_modificacion'] = date('Y-m-d H:i:s');
            $data['id_solicitud'] = $idSolicitud;
            $this->repuesto_x_cotizacion_model->deshacerSeleccion($data);
            echo self::STR_MENSAJE_OK;
        }
    }

    /**
     * Metodo para mostrar bandeja de solicitudes para el perfil administrador.
     * @author Fernando Esteban Valerio
     */
    public function look() {
        $lstSolicitud = $this->solicitud_model->getListSolicitud();
        $data = array(
            'lstSolicitud' => $lstSolicitud,
            'tamCodigo' => INT_TAM_CODIGO,
            'estadoSuspendida' => INT_ESTADO_SUSPENDIDA,
            'estadoEnviada' => INT_ESTADO_ENVIADA,
            'estadoConRespuesta' => INT_ESTADO_CON_REPUESTA
        );
        $data['page_title'] = 'Solicitudes';
        $this->load->view('solicitud/solicitud_look_view', $data);
    }

}